package algorithmicFoundation.homework.day3;

import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdRandom;

/**
 * 客户端程序
 *
 * @author 86155
 * @date 2025/08/11
 */
public class Permutation {
   public static void main(String[] args){
      // 从命令行读取k
      int k = Integer.parseInt(args[0]);
      // 存储抽样结果
      RandomizedQueue<String> samples = new RandomizedQueue<>();
      // 记录已处理元素数量
      int count = 0;
      while (!StdIn.isEmpty()) {
         String item = StdIn.readString();
         count++;
         // 前k个元素直接放入抽样池
         if (count <= k) {
            samples.enqueue(item);
         }
         // 后续元素按概率替换
         else {
            // 生成[0, count)随机数
            int randIndex = StdRandom.uniformInt(count);
            if (randIndex < k) {
               // 随机移除一个旧元素
               samples.dequeue();
               // 加入新元素
               samples.enqueue(item);
            }
         }
      }
      //输出
      for (String s : samples) {
         System.out.println(s);
      }

   }
}